TalendにJavaのコードを書く
はじめに
Talendはソースコードを書かなくても(書けなくても)プログラムが作れてしまうのがメリットではありますが、Javaのソースコードを書くことも勿論できます。 『こういう処理を作りたいけど、どのコンポーネント使っていいのかが分からない』といった時にはソースコードを直接書いた方が手っ取り早い事もあるかと思います。
環境
今回使用した環境は、以下の通りです。 Talend最新版導入してみました。
- Windows8.1
- Talend Open Studio 6.2.0
- Java 1.8(Talendのバージョン6.2.0ではJava8で動きます)
- MySQL5.7
実装
例 その1
tJavaコンポーネントを使って、その中にJavaのコードを書くだけです。 基本設定タブにコード、 詳細設定タブにimport文を書くことができます。
例ですが、外出しにしているSQLファイルをTalendで読み込み、読み込んだSQLを実行するプログラムを作成する必要がありました。 ファイルを読み込んで文字列として保持しておきたい場合、どのコンポーネント使ってよいのかが分からなかったので、その部分をJavaで書きました。 ブログ用に簡略化してはいますが、大体以下のようなジョブです。 tFileListでC:\File\sql以下にあるsqlファイルを取得し、tJavaでそのファイルを読み込みます。 tJavaで読み込んだsqlを次のコンポーネントに渡すために保持しておきたいので、contextビューで変数を定義しておきました。 tJavaのコードは以下です。
String fileName = (String)globalMap.get("tFileList_1_CURRENT_FILEDIRECTORY") + "\\" + (String)globalMap.get("tFileList_1_CURRENT_FILE"); File file = new File(fileName); try (FileReader fr = new FileReader(file); BufferedReader reader = new BufferedReader(fr)) { StringBuilder sql = new StringBuilder(); String temp = ""; while ((temp = reader.readLine()) != null) { sql.append(temp); } context.sql = sql.toString(); } catch(FileNotFoundException e) { throw new Exception(e); }
tFileListの中でglobalMapの中に、"tFileList_1_CURRENT_FILEDIRECTORY"をキーにして現在のディレクトリ、"tFileList_1_CURRENT_FILE"をキーにして現在のファイルがセットされているので、そいつを取得してます。 ファイルのパスが分かれば単純にファイルを読み込む処理を書いているだけです。読込んだSQLはcontextのsqlに保持しておきます。 あとは、tMysqlで読込んだSQL実行するだけです。 tMysqlコンポーネントのクエリにcontext.sqlと書いておくだけでSQLが実行されます。
例 その2
よく使う便利なメソッドとかはUtilクラスとしてまとめておくことも多々あると思うのですが、Talendでもそういうことができます。 リポジトリビューのコード→ルーチンで新たなフォルダを作り、その下にルーチンを作成します。 ルーチンといってますが、中身はJavaのクラスです。 適当にstaticメソッドを定義しておけば、Talendのコンポーネント上で使うことができますよ。
少し不親切な点
個人的に少し不親切な点だと思ったのが、コンパイルエラーを教えてくれません。(コンパイルエラーがあれば赤波線が引かれるという環境に慣れきってしまっていたので。。) ジョブの下の方にあるCodeをクリックしてコードを表示するとコンパイルエラーが分かりますので、tJavaでソースコードを書いた後は、codeをクリックして確認しておくといいと思います。 おそらく、デザイナーの画面ではコードが自動生成・ビルドされておらず、codeをクリックする時にソースコードの自動生成が行われているのだと思います。
おわりに
Talendで行き詰ったらJavaの力で解決できる事もあると思います。 tJava以外にもソースコードが書けるコンポーネントがありますが、まだ触れてません。 機会があれば使用してみて、違いなどを調べてみたいと思います。